package com.day01.basic;

import org.springframework.util.Assert;

import java.util.Arrays;

public abstract class ArgCommand<T> {

    // 哪种方式，内存存储or数据库存储
    protected String type;

    // 由子类去决定是内存存储还是数据库存储，具体存储逻辑在这个source中实现
    protected T source;

    public ArgCommand(String type, T source) {
        Assert.notNull(type, "type不能为空");
        Assert.notNull(source, "source不能为空");
        this.type = type;
        this.source = source;
    }

    /**
     * 对外提供一个判断命令行key是否存在的通用接口
     */
    protected boolean contain(String name) {
       String[] keys = keys();
       return Arrays.stream(keys).filter(key -> key.equals(name)).findFirst().isPresent();
    }

    /**
     * 由具体的基类去实现怎么获取命令行的key，从内存or数据库
     */
    public abstract String[] keys();
}
